from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from .config import config
from flask_wtf import CSRFProtect
from flask_login import LoginManager
from app.utils import init_error_handle, my_template_filter

# 会话对象
db = SQLAlchemy()

# 登录对象
login_manager = LoginManager()
# admin.login登录视图
login_manager.login_view = "admin.login"
login_manager.session_protection = "strong"

def create_app(config_name):
    app = Flask(__name__)
    # 载入配置
    app.config.from_object(config.get(config_name))
    # 注册会话
    db.init_app(app)
    # 注册登录
    login_manager.init_app(app)

    #csrf验证
    # CSRFProtect(app)

    with app.app_context():
        # 导入所有模型
        from app.models import Admin, Role, Auth

        '''初始化表与数据 创建后可以注释'''
        from app.test_data import init_table_data
        # init_table_data(db)

    # 注册蓝图
    from .controllers import register_blueprint
    register_blueprint(app)

    #注册错误
    init_error_handle(app, db)

    # 自定义过滤器
    my_template_filter(app)

    return app

